﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App_Persistencia;
using System.Net.Mail;
using System.Net;
using System.IO;
using System.Data;
using System.Web;

namespace App_Negocio
{
    public class Reunion
    {
        private int id;
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        private DateTime fecha;
        public DateTime Fecha
        {
            get { return fecha; }
            set { fecha = value; }
        }

        private string observaciones;
        public string Observaciones
        {
            get { return observaciones; }
            set { observaciones = value; }
        }

        private string respuestaEmpresa;
        public string RespuestaEmpresa
        {
            get { return respuestaEmpresa; }
            set { respuestaEmpresa = value; }
        }

        private string observacionEjecucion;
        public string ObservacionEjecucion
        {
            get { return observacionEjecucion; }
            set { observacionEjecucion = value; }
        }

        private Reunion_Tipo reunionTipo;
        public Reunion_Tipo ReunionTipo
        {
            get { return reunionTipo; }
            set { reunionTipo = value; }
        }

        private Reunion_Estado reunionEstado;
        public Reunion_Estado ReunionEstado
        {
            get { return reunionEstado; }
            set { reunionEstado = value; }
        }

        private Cliente cliente;
        public Cliente Cliente
        {
            get { return cliente; }
            set { cliente = value; }
        }

        private Presupuesto presupuesto;
        public Presupuesto Presupuesto
        {
            get { return presupuesto; }
            set { presupuesto = value; }
        }

        private Evento evento;

        public Evento Evento
        {
            get { return evento; }
            set { evento = value; }
        }

        private List<Alimento> platosADegustar = new List<Alimento>();

        public List<Alimento> PlatosADegustar
        {
            get { return platosADegustar; }
            set { platosADegustar = value; }
        }

        private string hora;

        public string Hora
        {
            get { return hora; }
            set { hora = value; }
        }

        public void enviarMail(string urlLogo, string mensajeReunion)
        {

            string LOGO = urlLogo;// "http://www.castilloeventos.com/logo.jpg";

            //  @"<p>Visita <strong><a href=""http://www.CastilloEventos.com"">CastilloEventos</a></strong></p>";
            const string MENSAJE_TEXTO = "CastilloEventos\n\nwww.castilloeventos.com";

            const string MENSAJE_HTML = @"<head>" +
        @"<title>Reunión</title>" +
        @"<style type=""text/css"">" +
        @"   .style2" +
        @"    {" +
        @"        height: 23px;" +
        @"    }" +
        @"    .style4" +
        @"    {" +
        @"        width: 511px;" +
        @"        color: #CCCCCC;" +
        @"        font-weight: 700;" +
        @"    }" +
        @"    .style5" +
        @"    {" +
        @"        width: 180px;" +
        @"    }" +
        @"    .style6" +
        @"    {" +
        @"        width: 170px;" +
        @"    }" +
        @"    .style7" +
        @"    {" +
        @"        width: 10px;" +
        @"    }" +
        @"    .style8" +
        @"    {" +
        @"        width: 250px;" +
        @"    }" +

        @".style14" +
        @"{  font-family: Tahoma;" +
        @"    font-size: small;} " +

        @".style16" +
        @"{   font-family  : Tahoma;" +
        @"    font-size: small;" +
        @"    font-weight: bold;}" +

        @".style9" +
        @"   {" +
        @"        width: 511px;" +
        @"        font-family: Tahoma;" +
        @"        font-size: medium;" +
        @"        color: #FFFFFF;" +
        @"    }" +
        @"</style>" +
    @"</head>" +
    @"<body bgcolor=""#000000"">" +

        @"<table bgcolor=""Black"" cellpadding=""-1"" cellspacing=""-1"" " +
        @"    style=""border-style: none; border-color: #000000; width: 100%;"">" +
        @"    <tr>" +
        @"        <td class=""style6"">" +
        @"            &nbsp;</td>" +
        @"        <td class=""style8"">" +
        @"            <img src=""cid:logo"" /></td>" +    //Original <img  src=""Imagenes/logo.jpg"" style=""width: 467px; height: 89px"" />
        @"        <td>" +
        @"            &nbsp;</td>" +
        @"    </tr>" +
        @"    <tr>" +
        @"        <td class=""style2"" colspan=""3"">" +
        @"            <table cellpadding=""0"" cellspacing=""0"" style=""width:100%;"">" +
        @"                <tr>" +
        @"                   <td class=""style5"">" +
        @"                        &nbsp;</td>" +
        @"                    <td bgcolor=""#C64787"" class=""style7"" " +
        @"                        style=""border-width: thin; border-color: #000000; border-style: solid none solid none;"">" +
        @"                        &nbsp;</td>" +
        @"                    <td bgcolor=""#C64787"" class=""style9"" " +
        @"                        style=""border-width: thin; border-color: #000000; border-style: solid none solid none;"">";





            System.Text.StringBuilder htmlPresup = new System.Text.StringBuilder(MENSAJE_HTML);


            System.Text.StringBuilder menuCompleto = new StringBuilder();

            menuCompleto.Append(
                @"                Reunión </td>" +
                @"                    <td bgcolor=""#C64787"" class=""style7"" " +
                @"                        style=""border-width: thin; border-color: #000000; border-style: solid none solid none;"">" +
                @"                        &nbsp;</td>" +
                @"                    <td>" +
                @"                        &nbsp;</td>" +
                @"                </tr>" +
                @"                <tr>" +
                @"                    <td class=""style5"">" +
                @"                        &nbsp;</td>" +
                @"                    <td bgcolor=""#00334C"" class=""style7"">" +
                @"                        &nbsp;</td>" +
                @"                    <td bgcolor=""#00547D"" class=""style4"">" +
                @"     <table cellpadding=""0"" cellspacing=""0"" style=""width:100%;"">" +

            //int i = 0;
                //foreach (Presupuesto_Detalle pd in PresupuestoDetalle)
                //{
                //    i++;

            //    menuCompleto.Append(

            //         @"                        <tr>" +
                //         @"                            <td style=""border: thin solid #00334C"" class=""style16"">" +
                //         @"                                Menú opción " + i + "&nbsp;&nbsp;&nbsp;Precio por persona: $&nbsp;" + pd.PrecioVenta + "</td>" +
                //         @"                        </tr>");
                //    //pd.Menu.Menu_Detalles = new List<Menu_Detalle>();//PRUEBA
                //    foreach (Menu_Detalle men in pd.Menu.Menu_Detalles)
                //    {
                //        //menuCompleto.Append(men.AlimentoRef.Tipo_AlimentoRef.Nombre + "<br />");
                //        menuCompleto.Append(
                //            @" <tr>" +
                //            @"                            <td bgcolor=""#0085C6"" style=""border: none "">" +
                //            @"&nbsp;&nbsp;<span class=""style14"">&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;" + men.AlimentoRef.Tipo_AlimentoRef.Nombre + @"&nbsp;<span style=""font-weight:normal"">" + men.AlimentoRef.Nombre +
                //            @"</span></span><br class=""style14"" />" +
                //            @"</td>" +
                        @"</tr>");

            //    }





            //}
            htmlPresup.Append(menuCompleto.ToString());



            String sal = @"                        <tr>" +
                     @"                            <td style=""border: thin solid #00334C"" class=""style16"">" +
                     @"                                Mensaje</td>" +
                     @"                        </tr>" +
                     @" <tr>" +
                     @"                            <td bgcolor=""#0085C6"" style=""border: none "">" +
                     @"&nbsp;&nbsp;<span class=""style14""><span style=""font-weight:normal"">&nbsp;&nbsp;&nbsp;&nbsp;- " + mensajeReunion +
                     @"<br/> &nbsp;&nbsp;&nbsp;&nbsp;- Av del Trabajo 1134 - Bº Talleres (o)</span></span><br class=""style14"" />" +
                     @"</td>" +
                     @"</tr>";
            htmlPresup.Append(sal.ToString());



            htmlPresup.Append(
        @"                    </table>" +
        @"                     <span style=""font-weight:normal"">Quedo a su disposición y aprovecho la oportunidad para saludarlo <br/> con distinguida consideración.<br/>" +
        @"    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @"    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @"    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @"    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @"    Saluda atte.<br/>" +
        @"   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @"    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @"    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
        @" Alba de Castillo - Dirección</td></span>   " +
        @"                    <td bgcolor=""#00334C"" class=""style7"">" +
        @"                      <br/> </td>" +
        @"                    <td>" +
        @"                     <br/></td>" +
        @"                </tr>" +
        @"                <tr>" +
        @"                    <td class=""style5"">" +
        @"                       </td>" +
        @"                    <td>" +
        @"                        <br/><br/><br/><br/><br/></td>" +
        @"                </tr>" +
        @"            </table>" +
        @"        </td>" +
        @"   </tr>" +
        @"</table>" +
        @"<br/><br/><br/><br/><br/>" +
        @"</body>");




            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

            msg.To.Add(Cliente.Email);
            msg.From = new MailAddress("info@castilloeventos.com", "Castillo Eventos", System.Text.Encoding.UTF8);
            msg.Subject = "Castillo Eventos - Reunion";
            msg.SubjectEncoding = System.Text.Encoding.UTF8;



            AlternateView html = AlternateView.CreateAlternateViewFromString(htmlPresup.ToString(), System.Text.Encoding.UTF8, "text/html");
            AlternateView texto = AlternateView.CreateAlternateViewFromString(MENSAJE_TEXTO, System.Text.Encoding.UTF8, "text/html");
            LinkedResource logo = new LinkedResource(LOGO);
            logo.ContentId = "logo";
            html.LinkedResources.Add(logo);

            msg.AlternateViews.Add(texto);
            msg.AlternateViews.Add(html);


            msg.IsBodyHtml = true;

            //Aquí es donde se hace lo especial
            SmtpClient client = new SmtpClient();
            client.Credentials = new System.Net.NetworkCredential("info@castilloeventos.com", "U8ujmkk");
            client.Port = 587;
            client.Host = "mail.castilloeventos.com";
            //client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
            try
            {
                client.Send(msg);
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
                throw new SystemException(ex.Message);
            }

        }


        public static DataTable horariosDisponibles(int tipoEmpleadoId, DateTime fecha)
        {
            DataTable horariosDisponibles = Reunion_Data.listarHorariosDisponibles(tipoEmpleadoId, fecha);
            return horariosDisponibles;
        }

        public void guardarReunion()
        {
            Reunion_Data reunion = new Reunion_Data();
            reunion.Fecha = Fecha;
            reunion.Observaciones = Observaciones;
            reunion.ReunionTipo = new Reunion_Tipo_Data();
            reunion.ReunionTipo.Id = ReunionTipo.Id;
            reunion.ReunionTipo.EmpleadoTipo = new Empleado_Tipo_Data();
            reunion.ReunionTipo.EmpleadoTipo.Id = ReunionTipo.EmpleadoTipo.Id;
            reunion.Cliente = new Cliente_Data();
            reunion.Cliente.ClienteId = Cliente.ClienteId;
            reunion.Presupuesto = new Presupuesto_Data();
            reunion.Presupuesto.Id = Presupuesto.Id;
            reunion.Evento = new Evento_Data();
            reunion.Evento.Id = Evento.Id;
            reunion.Hora = Hora;
            
            Alimento_Data item = null;
            reunion.PlatosADegustar = new List<Alimento_Data>();
            foreach (Alimento ali in PlatosADegustar)
            {
                item = new Alimento_Data();
                item.Id = ali.Id;
                reunion.PlatosADegustar.Add(item);
            }
                        
            reunion.guardarReunion();

        }

        public DataTable listarReunionesPendientes()
        {
            Reunion_Data reunion = new Reunion_Data();
            DataTable tabla = reunion.popularReunionesPendientes();
            return tabla;
        }
        public DataTable listarReunionPendiente(int idReunion)
        {
            Reunion_Data reunion = new Reunion_Data();
            DataTable tabla = reunion.popularReunionPendiente(idReunion);
            return tabla;
        }

        /// <summary>
        /// Modificado por mauri
        /// </summary>
        public void BuscarReunion()
        {
            Reunion_Data reunion = new Reunion_Data();
            reunion.Id = id;
            reunion.BuscarReunion();
            Cliente = new Cliente();
            Cliente.ApeCliente = reunion.Cliente.ApeCliente;
            Cliente.NomCliente = reunion.Cliente.NomCliente;
            Fecha = reunion.Fecha;
            Hora = reunion.Hora;
            Observaciones = reunion.Observaciones;
            RespuestaEmpresa = reunion.RespuestaEmpresa;
            ReunionTipo = new Reunion_Tipo();
            ReunionTipo.Nombre = reunion.ReunionTipo.Nombre;

            // MODIFICACION
            if (reunion.Evento != null)
            {
                Evento = new Evento();
                Evento.Id = reunion.Evento.Id;
                Alimento item = null;
                foreach (Alimento_Data ali in reunion.PlatosADegustar)
                {
                    item = new Alimento();
                    item.Id = ali.Id;
                    item.Nombre = ali.Nombre;
                    item.Descripcion = ali.Descripcion;
                    item.Foto_Plato = ali.Foto_Plato;
                    PlatosADegustar.Add(item);
                }
            }

        }

        public void confirmarCancelarReunion(string accion)
        {

            Reunion_Data reunion = new Reunion_Data();
            reunion.Id = id;
            reunion.confrimarCancelarReunion(accion);

        }

        public void actualizarReunion()
        {
            Reunion_Data reunion = new Reunion_Data();
            reunion.Id = Id;
            reunion.Observaciones = Observaciones;
            reunion.RespuestaEmpresa = respuestaEmpresa;
            reunion.ObservacionEjecucion = observacionEjecucion;
            reunion.ReunionEstado = new Reunion_Estado_Data();
            reunion.ReunionEstado.Numero = ReunionEstado.Numero;
            reunion.actualizarReunion();
        }

        public void ActualizarReunionYPresupuesto(int idReunion, int idPresupuesto)
        {
            Reunion_Data reunion = new Reunion_Data();
            reunion.ActualizarReunionYPresupuesto(idReunion, idPresupuesto);

        }

        /// <summary>
        /// Creado por mauri
        /// </summary>
        public void actualizarReunionDegustacion(Alimento principalNuevo)
        {

            //busco el menu del evento
            List<Menu> listaMenues = Menu.listarMenu_ListaxEvento(Evento);
            Menu menuAGuardar = null;
            int idMenuViejo = -1;
            //modifico menu
            foreach (Menu m in listaMenues)
            {
                if (m.Menu_Tipo == 1)
                {
                    m.cargarMenuDetalles(m.Id);
                    foreach (Menu_Detalle md in m.Menu_Detalles)
                    {
                        //if (md.AlimentoRef.Tipo_AlimentoRef.Id == 3)
                        if (md.AlimentoRef.Tipo_AlimentoRef.Nombre == "Principal: ")
                        {
                            md.AlimentoRef = principalNuevo;
                            idMenuViejo = m.Id;
                            menuAGuardar = m;

                            foreach (Menu_Detalle mdi in m.Menu_Detalles)
                            {
                                mdi.Cantidad = 1;
                            }

                            break;
                        }
                    }
                    break;
                }
            }

            //guardo nuevo menu

            menuAGuardar.guardarMenu();

            //actualizo reunion

            Reunion_Data reunion = new Reunion_Data();
            reunion.Id = Id;
            reunion.Observaciones = Observaciones;

            reunion.actualizarReunionDegustacion(menuAGuardar.Id, Evento.Id, idMenuViejo);
        }

        public DataTable traerReunionesPendientes()
        {
            Reunion_Data reunion = new Reunion_Data();
            return reunion.traerReunionesPendientes();
        }

        public DataTable traerReunionesPendientesYConfirmadas()
        {
            Reunion_Data reunion = new Reunion_Data();
            return reunion.traerReunionesPendientesYConfirmadas();
        }

    }
}
